package org.francho.apps.unutopia_android; import org.francho.apps.unutopia_android.data.FeedContract.Articles; import org.francho.apps.unutopia_android.widget.FeedsAdapter; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.View; import android.widget.ListView; public class ArticleListFragment extends ListFragment { private static final String STATE_ACTIVATED_POSITION = "activated_position"; public ArticleListFragment() { } private int mActivatedPosition = ListView.INVALID_POSITION; private ArticlesListener mArticlesListener = null; /** * A callback interface that all activities containing this fragment must * implement. This mechanism allows activities to be notified of item * selections. */ public interface ArticlesListener { /** * Callback for when an item has been selected. */ public void onArticleSelected(String articleUrl); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Context context = getActivity(); setListAdapter(new FeedsAdapter(context )); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Restore the previously serialized activated item position. if (savedInstanceState != null && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) { setActivatedPosition(savedInstanceState .getInt(STATE_ACTIVATED_POSITION)); } } @Override public void onAttach(Activity activity) { super.onAttach(activity); // Activities containing this fragment must implement its callbacks. if (!(activity instanceof ArticlesListener)) { throw new IllegalStateException( "Activity must implement ArticlesListener."); } mArticlesListener = (ArticlesListener) activity; } @Override public void onDetach() { super.onDetach(); mArticlesListener = null; } @Override public void onListItemClick(ListView listView, View view, int position, long id) { super.onListItemClick(listView, view, position, id); String[] projection = new String[]{Articles.LINK}; Cursor cursor = getActivity().getContentResolver().query(Articles.getUri(id), projection , null, null, null); String link = null; if(cursor.moveToFirst()) { link = cursor.getString(0); } cursor.close(); if(mArticlesListener != null) { mArticlesListener.onArticleSelected(link); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mActivatedPosition != ListView.INVALID_POSITION) { // Serialize and persist the activated item position. outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition); } } /** * Turns on activate-on-click mode. When this mode is on, list items will be * given the 'activated' state when touched. */ public void setActivateOnItemClick(boolean activateOnItemClick) { // When setting CHOICE_MODE_SINGLE, ListView will automatically // give items the 'activated' state when touched. getListView().setChoiceMode( activateOnItemClick ? ListView.CHOICE_MODE_SINGLE : ListView.CHOICE_MODE_NONE); } private void setActivatedPosition(int position) { if (position == ListView.INVALID_POSITION) { getListView().setItemChecked(mActivatedPosition, false); } else { getListView().setItemChecked(position, true); } mActivatedPosition = position; } }